package cn.mujiankeji.mbrowser.功能.播放框.核心


import cn.mujiankeji.mbrowser.功能.播放框.模型.播放状态枚举
import cn.mujiankeji.mbrowser.功能.播放框.模型.播放文件信息
import kotlinx.coroutines.flow.Flow
import cn.mujiankeji.mbrowser.功能.播放框.模型.音轨信息
import cn.mujiankeji.mbrowser.功能.播放框.模型.字幕信息

/**
 * 视频播放器核心接口
 * 定义播放器必须实现的基本功能
 */
interface PlayerInterface {
    /**
     * 播放器当前状态
     */
    val 播放状态: Flow<播放状态枚举>
    
    /**
     * 当前播放进度(毫秒)
     */
    val 当前进度: Flow<Long>
    
    /**
     * 视频总时长(毫秒)
     */
    val 总时长: Flow<Long>
    
    /**
     * 缓冲进度百分比(0-100)
     */
    val 缓冲进度: Flow<Int>
    
    /**
     * 当前播放速率
     */
    val 播放速率: Flow<Float>
    
    /**
     * 是否静音
     */
    val 是否静音: Flow<Boolean>
    
    /**
     * 当前视频信息
     */
    val 视频信息: Flow<播放文件信息?>
    
    /**
     * 设置视频源并准备播放
     * @param 视频来源 视频源信息
     * @param 自动播放 是否自动开始播放
     * @param 开始位置 恢复到的位置 --
     */
    fun 设置视频源(地址 : String,起始位置 : Long = 0L,协议头 : Map<String,String> ?= null,自动播放 : Boolean = true)

    /**
     * 开始或继续播放
     */
    fun 播放()

    /**
     * 暂停播放
     */
    fun 暂停()
    
    /**
     * 停止播放并释放资源
     */
    fun 停止()
    
    /**
     * 跳转到指定位置
     * @param 位置 目标位置(毫秒)
     */
    fun 跳转(位置: Long)
    
    /**
     * 设置播放速率
     * @param 速率 播放速率(0.5-2.0)
     */
    fun 设置播放速率(速率: Float)
    
    /**
     * 设置音量
     * @param 音量 音量值(0.0-1.0)
     */
    fun 设置音量(音量: Float)
    
    /**
     * 设置静音状态
     * @param 静音 是否静音
     */
    fun 设置静音(静音: Boolean)

    /**
     * 获取可用音轨
     */
    fun 获取可用音轨(): List<音轨信息>

    /**
     * 切换音轨
     */
    fun 切换音轨(音轨: 音轨信息)

    /**
     * 获取可用字幕
     */
    fun 获取可用字幕(): List<字幕信息>

    /**
     * 切换字幕
     */
    fun 切换字幕(字幕: 字幕信息?)
} 